home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1833 / 1833.xpi / chrome / yoono.jar / content / yoono / yoonoOverlay.js < prev    next >
Text File  |  2009-12-16  |  11KB  |  278 lines

  1. /**
  2.    Toolbar yoono Firefox/Mozilla
  3.    @author : L. Qu├⌐rel
  4.    Copyright 2005, Yoono SAS.
  5. **/
  6.  
  7. // Observer qui capte les desinstallations pour lancer les proc de clean up
  8. var uninstallObserver = {
  9.     observe:function(subject,topic,data) {
  10.         subject = subject.QueryInterface(Components.interfaces.nsIUpdateItem);        
  11.         if(subject.name == "Yoono") {
  12.             YOONO_LOG.debug('Em Action: ' + data);
  13.             switch(data) {
  14.               case "item-uninstalled" :
  15.                 YOONO_CMPT.uninstallAddonWhenQuitting(subject);
  16.                 break;
  17.  
  18.               case "item-cancel-action" :
  19.                 YOONO_CMPT.uninstallWhenQuitting = false;
  20.                 break;
  21.  
  22.               case "item-upgraded" :
  23.                 break;
  24.             }
  25.         }
  26.     },
  27.     
  28.     register:function() {
  29.         var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
  30.         observerService.addObserver(this, "em-action-requested", false);
  31.     },
  32.     
  33.     deregister:function() {
  34.         var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
  35.         observerService.removeObserver(this,"em-action-requested");
  36.     }
  37. };
  38.  
  39.  
  40. var yoono = {};
  41.  
  42.  
  43.  
  44. var yoonoObserver = {
  45.  
  46.     init: function() {
  47.       try {
  48.         var ua = navigator.userAgent.toLowerCase();
  49.         if(ua.indexOf('mac os')!=-1) {
  50.           var navBar = document.getElementById('nav-bar');
  51.           if(navBar) {
  52.             var classname = navBar.getAttribute('class');
  53.             classname += ' mac' ;
  54.             navBar.setAttribute('class', classname);
  55.           }
  56.           var popup = document.getElementById("account-selector-popup");
  57.           if(popup) {
  58.             var classname = popup.getAttribute('class');
  59.             classname += ' mac' ;
  60.             popup.setAttribute('class', classname);
  61.           }
  62.  
  63.         }
  64.  
  65.         
  66.         // Lire ds les pref la version qui a ete utilis├⌐e au lancement pr├⌐c├⌐dent
  67.         yoonoGlob.previousRelease = '';
  68.         try {
  69.             yoonoGlob.previousRelease = YNPREFBRANCH.getCharPref("release");
  70.         } catch(e) {
  71.             // pref not found : first install
  72.             YNPREFBRANCH.setIntPref("install_date", Math.round(new Date().getTime()/1000));
  73.         }
  74.         var extId = '{d9284e50-81fc-11da-a72b-0800200c9a66}';
  75.         var extmgr = Components.classes['@mozilla.org/extensions/manager;1'].getService(Components.interfaces.nsIExtensionManager);
  76.         yoonoGlob.currentRelease = extmgr.getItemForID(extId).version;
  77.         yoonoGlob.tosAccepted = YNPREFBRANCH.getBoolPref("tos-accepted");
  78.  
  79.         // If user just updated
  80.         if(yoonoGlob.currentRelease != yoonoGlob.previousRelease) {
  81.           // releases up to 5.4 did not have a tos-accepted flag...
  82.           if(yoonoGlob.previousRelease && (yoonoGlob.previousRelease < '5.5')) {
  83.             yoonoGlob.tosAccepted = true;
  84.             YNPREFBRANCH.setBoolPref("tos-accepted", true);
  85.           }
  86.           yoonoGlob.firstReleaseRun =  true;
  87.           YNPREFBRANCH.setBoolPref("first-release-run", true);
  88.           YNPREFBRANCH.setCharPref("updated.from", yoonoGlob.previousRelease); // for stats, reset after sent
  89.           YOONO_KEYVALUEDB.setKeyValue('sidebarUpdatedFrom', yoonoGlob.previousRelease);
  90.           YOONO_KEYVALUEDB.setKeyValue("sidebarFirstReleaseRun", true); // this will be reset by sidebar when it closes
  91.         } else {
  92.           yoonoGlob.firstReleaseRun =  false;
  93.           YNPREFBRANCH.setBoolPref("first-release-run", false);
  94.         }
  95.         YNPREFBRANCH.setCharPref("release", yoonoGlob.currentRelease);
  96.         YOONO_KEYVALUEDB.setKeyValue('sidebarRelease', yoonoGlob.currentRelease);
  97.         
  98.         yoonoGlob.firstRun = YNPREFBRANCH.getBoolPref("firstrun");
  99.         if(yoonoGlob.firstRun) {
  100.           // check the campaign cookie
  101.           var cookiesEnum = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager).enumerator;
  102.           var campaignId = 0;
  103.           while (cookiesEnum.hasMoreElements()) {
  104.             var cookie = cookiesEnum.getNext().QueryInterface(Components.interfaces.nsICookie2);
  105.             if(('www.yoono.com' == cookie.host) && ('rc' == cookie.name)) {
  106.               campaignId = cookie.value
  107.               YOONO_KEYVALUEDB.setKeyValue("sidebarMarketingCampaign", campaignId);
  108.               cookiesEnum = null;
  109.               break;
  110.             }
  111.           }
  112.         }
  113.  
  114.  
  115.         yoono = {};
  116.         yoono.log=YOONO_LOG;
  117.         yoono.utils=YOONO_UTILS;
  118.         yoono.server=YOONO_SERVER;
  119.         yoono.prefs=YOONO_PREFS;
  120.         yoono.yextif=YOONO_YEXTIF;
  121.         yoono.sidebar=YOONO_SIDEBAR;
  122.         yoono.storage=YOONO_STORAGE;
  123.         
  124.         yoono.main=YOONO_CMPT;
  125.         yoono.bkm=YOONO_BKM;
  126.         yoono.dialogs=YOONO_DIALOGS;
  127.         
  128.         YOONO_LOG.init(yoono);
  129.         YOONO_PREFS.init(yoono);
  130.         YOONO_SERVER.init(yoono);
  131.         YOONO_DIALOGS.init(yoono);
  132.         YOONO_CMPT.init(yoono);
  133.         YOONO_SIDEBAR.init(YOONO_CMPT);
  134.         YOONO_YEXTIF.init(yoono);
  135.         YOONO_STORAGE.init(yoono);
  136.  
  137.         var originalSplit = '';
  138.         try {
  139.           var originalSplit = YNPREFBRANCH.getCharPref("originalSplit");
  140.         } catch(e) {}
  141.  
  142.         if(!originalSplit) {
  143.           originalSplit = YNPREFBRANCH.getCharPref("autoinstall"); // can be 'full', 'discovery', 'friends'
  144.           YNPREFBRANCH.setCharPref("originalSplit", originalSplit);
  145.         }
  146.  
  147.         // On first install, inc a counter on the server
  148.         serverUrl = YNPREFBRANCH.getCharPref('serverurl');
  149.         if(yoonoGlob.firstRun) {
  150.           YOONO_CMPT.sendRequest(serverUrl + 'rest/counters/one/install/xpi', 'POST', 'async', '', null);
  151.           if(campaignId) {
  152.             var campaignString = campaignId + '-install-ff' ;
  153.             YOONO_CMPT.sendRequest(serverUrl + 'rest/counters/one/campaign/' + campaignString, 'POST', 'async', '', null);
  154.           }
  155.         }
  156.         // update flag for next time...
  157.         YNPREFBRANCH.setBoolPref("firstrun", false);
  158.         
  159.         this.requestProcessed = false;
  160.         
  161.         yoonoGlob.externalInterfaces = yoono.yextif;
  162.         
  163.         // create the instance to manage the sidebar.
  164.         // Its init method will be called each time the sidebar is opened, and its uninit method
  165.         // each time it is closed.
  166.         // The YoonoSidebar class is declared in sidebar.js (loaded in main document), and enriched in
  167.         // sidebarPanel.js, loaded in sidebarPanel.xul document when sidebar is opened
  168.         yoonoGlob.sidebar = new YoonoSidebar(yoonoGlob.externalInterfaces);
  169.  
  170.         yoonoGlob.MemoMgr = yoonoGlob.externalInterfaces.methods.getMemoMgr();
  171.         yoonoGlob.MemoMgr.getList(null);
  172.         
  173.         yoonoGlob.gStrbundle=document.getElementById("yoono-strings");
  174.         
  175.         uninstallObserver.register();
  176.         
  177.         ynTabbrowserListener.init();
  178.         
  179.         // Afficher d'├⌐ventuels nouveaux boutons apparus depuis la derniere version install├⌐e
  180.         // (qui sinon n'apparaissent pas en cas de customisation)
  181.         yoonoGlob.updateInterface();
  182.         
  183.         attachYoonoBkmMenu('toolbar');
  184.         markPrivateFolders();
  185.         
  186.         // Add a mouseup listener to store the focused window when a selection is done,
  187.         // So that selection can be accessed when clicking on a shortcut in the sidebar
  188.         // (which changes the focused window !!)
  189.         var content = document.getElementById('content');
  190.         var panel = content.mPanelContainer;
  191.         var _self = this;
  192.         panel.addEventListener('mouseup', function(evt) {_self.mouseUpHandler(evt)}, true);
  193.         // code below is just an investigation, not used for now
  194.         // panel.addEventListener('mousemove', function(evt) {_self.mouseMouveHandler(evt)}, true);
  195.         
  196.          } catch(e) {
  197.         // we don't use yoono.log because it does'nt work at this time :/
  198.         var CONSOLESERVICE = YOONO_CL["@mozilla.org/consoleservice;1"].getService(YOONO_CI.nsIConsoleService);
  199.         CONSOLESERVICE.logStringMessage(" ### MAIN OVERLAY INIT EXCEPTION : \n "+e+"\n"+e.stack+"\n ###\n");
  200.         }
  201.   },
  202.  
  203.   // Memorize the focused window, so that it is available when querying the selection even if focuse has changed
  204.   mouseUpHandler : function(evt) {
  205.     var focusedWindow = document.commandDispatcher.focusedWindow;
  206.     var content = document.getElementById('content');
  207.     if (focusedWindow == window)
  208.       focusedWindow = content;
  209.     yoonoGlob.focusedWindow = focusedWindow;
  210.   },
  211.  
  212.   // Memorize the focused window, so that it is available when querying the selection even if focuse has changed
  213.   mouseMouveHandler : function(aEvent) {
  214.     if(yoonoGlob.mouseOverTimer) {
  215.       clearTimeout(yoonoGlob.mouseOverTimer);
  216.       yoonoGlob.mouseOverTimer = null;
  217.     }
  218.     var textContent = aEvent.rangeParent.textContent;
  219.     var rangeOffset = aEvent.rangeOffset ;
  220.     var _self = this;
  221.     
  222.     yoonoGlob.mouseOverTimer = setTimeout(function() {
  223.       _self.processMouseMove(textContent, rangeOffset);
  224.     }, 500);
  225.   },
  226.  
  227.   processMouseMove : function(textContent, aRangeOffset) {
  228.     var words = textContent.replace(/[\.\?,;:\/!=+]/g, ' ');
  229.  
  230.     var begining = words.substr(0, aRangeOffset);
  231.     var ending = words.substr(aRangeOffset);
  232.  
  233.     var firstCharOffset = begining.lastIndexOf(' ') + 1 ;
  234.     var wordBegining = begining.substr(firstCharOffset);
  235.     var lastCharOffset = ending.indexOf(' ');
  236.     var wordEnding = ending.substr(0, lastCharOffset);
  237.  
  238.     var word = wordBegining + wordEnding;
  239.     yoonoGlob.debug('MOUSEOVER: ' + word);    
  240.   },
  241.    // D├⌐sabonnement aux ├⌐v├⌐nements
  242.   uninit: function() {
  243.     ynTabbrowserListener.uninit();
  244.     
  245.     uninstallObserver.deregister();
  246.     
  247.     if(yoonoGlob.sidebar.visible) {
  248.       yoonoGlob.sidebar.win.ynSidebar.saveConfig();
  249.     }
  250.     YOONO_LOG.debug("Closing popouted yoodgets from extension");
  251.     yoonoGlob.externalInterfaces.goodbye();
  252.     
  253.     
  254.   },
  255.  
  256.     uninstallFromButton: function() {
  257.         var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
  258.         var YOONO_ID = "{d9284e50-81fc-11da-a72b-0800200c9a66}"; // ├á remplacer lorsque l'objet centralisant le yoono id sera pr├¬t
  259.  
  260.         var item = gExtensionManager.getItemForID(YOONO_ID);
  261.         yoono.main.addStat(['clic.yoonobutton.uninstall'], 1);
  262.         gExtensionManager.uninstallItem(YOONO_ID); 
  263.     },
  264.     
  265.   
  266.   
  267. }
  268.  
  269.  
  270. function ynOpenChrome(uri, arg) {
  271.   yoonoGlob.debug('ynOpenChrome: ' + uri + ' ' + arg);
  272.   window.openDialog('chrome://yoono/content/dialogs/' + uri + '.xul', uri, 'chrome,modal', arg);
  273. }
  274.  
  275.  
  276. window.addEventListener("load", function() { yoonoObserver.init(); }, false);
  277. window.addEventListener("unload", function() { yoonoObserver.uninit(); }, false);
  278.